有了上面的基础那么传输文件的实现就变得简单了,在传输时通常我们需要打开文件,并每次读入1024个字节的数据包,通过SSL加密传输即可,此处的文件传输功能在原生套接字章节中也进行过详细讲解,此处我们还是使用原来的密钥对,实现一个服务端等待客户端上传,当客户端连接到服务端后则开始传输文件,服务端接收文件的功能。
服务端代码部分,此处我们只需要实现一个DownloadFile函数,该函数接收一个SSL套接字,与保存文件路径即可,其他部分同上。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
extern "C"
{
#include
}
#pragma comment(lib, "WS2_32.lib")
#pragma comment(lib,"libssl.lib")
#pragma comment(lib,"libcrypto.lib")
#define MAXBUF 1024
// 从路径中获取当前文件名
char* GetFileName(char* Path)
{
if (strchr(Path, '\\'))
{
char ch = '\\';
char* ref = strrchr(Path, ch) + 1;
return ref;
}
else
{
char ch = '/';
char* ref = strrchr(Path, ch) + 1;
return ref;
}
}
// 下载文件到当前目录
// 传入套接字句柄,以及放置根目录
void DownloadFile(SSL* ptr, const char* RootPath)
{
int FileSize = 0;
char FilePath[1024] = { 0 };
char buffer[1024] = { 0 };
// 接收文件长度
SSL_read(ptr, &FileSize, 4);
// 接收文件路径
SSL_read(ptr, FilePath, 1024);
// 获取到文件名
char* FileName = GetFileName(FilePath);
// 拼接路径
char sz[1024] = { 0 };
strcpy(sz, RootPath);
strcat(sz, FileName);
std::cout |